Loose Coupling Nedir? Java’da Dependency Injection Örneği
Object-Oriented Programming (OOP) prensiplerine uygun bir şekilde esnek, sürdürülebilir ve modüler yazılım geliştirmek istiyorsak sınıflar arasındaki bağımlılıkları minimum seviyede tutmamız gerekir. Bu noktada Loose Coupling (Gevşek Bağlılık) prensibi devreye girer.
Spring Boot uygulamalarında dependency injection konusunu öğrenmek isterseniz Spring Boot CRUD örnekleri yazımıza da göz atabilirsiniz.
Coupling (Bağlılık) Nedir?
Yazılım geliştirme sürecinde bir sınıf başka bir sınıfa doğrudan bağlıysa bu durum Coupling (Bağlılık) olarak adlandırılır.
Örneğin bir sınıf içerisinde başka bir sınıfı şu şekilde oluşturursak:
Database database = new Database();
Bu durumda sınıfımız ilgili nesneye doğrudan bağımlı hale gelir. Bu da Tightly Coupled (Sıkı Bağlılık) oluşturur.
Loose Coupling (Gevşek Bağlılık) Nedir?
Loose Coupling, sınıfların birbirine olan bağımlılığını azaltmayı amaçlayan bir yazılım tasarım prensibidir.
Bu prensip sayesinde:
- Sistem daha modüler hale gelir
- Kod daha kolay test edilir
- Yeni özellik eklemek kolaylaşır
- Sistem değişikliklere daha dayanıklı olur
Loose coupling elde etmek için en yaygın kullanılan tekniklerden biri Dependency Injection (Bağımlılık Enjeksiyonu) yöntemidir.
Dependency Injection Nedir?
Dependency Injection, bir sınıfın ihtiyaç duyduğu bağımlılıkların o sınıf içerisinde oluşturulması yerine dışarıdan verilmesidir.
Bağımlılık enjeksiyonu genellikle üç şekilde yapılır:
- Constructor Injection
- Setter Injection
- Field Injection
Bu yazıda Constructor Injection örneğini inceleyeceğiz.
Java’da Constructor Injection Örneği
Aşağıdaki örnekte DatabaseManager sınıfı farklı veritabanlarına bağlanabilmek için bir interface kullanmaktadır.
Bu sayede sadece kullanılan implementasyonu değiştirerek farklı veritabanlarına bağlanabiliriz.
Main Class
public class Main {
public static void main(String[] args) {
DatabaseManager databaseManager =
new DatabaseManager(new Database_Mongo());
databaseManager.connect();
}
}
DatabaseManager Class
public class DatabaseManager {
private IDatabase iDatabase;
public DatabaseManager(IDatabase iDatabase) {
this.iDatabase = iDatabase;
}
public void connect() {
iDatabase.connect();
}
}
Bu yapı sayesinde DatabaseManager herhangi bir veritabanına doğrudan bağlı değildir.
MySQL Implementasyonu
public class Database_Mysql implements IDatabase {
public void connect() {
System.out.println(
"MySQL veritabanı ile bağlantı kuruldu");
}
}
MongoDB Implementasyonu
public class Database_Mongo implements IDatabase {
@Override
public void connect() {
System.out.println(
"MongoDB veritabanı ile bağlantı kuruldu");
}
}
IDatabase Interface
public interface IDatabase {
void connect();
}
Loose Coupling Avantajları
- Kod bağımlılıkları azalır
- Sistem daha modüler hale gelir
- Yeni veritabanı veya servis eklemek kolay olur
- Unit test yazmak kolaylaşır
- Kod okunabilirliği artar
- Bakım maliyeti düşer
Sık Sorulan Sorular
Loose coupling neden önemlidir?
Dependency Injection ile loose coupling nasıl sağlanır?
Spring Framework dependency injection kullanır mı?
Sonuç
Loose Coupling, modern yazılım geliştirme süreçlerinde önemli bir tasarım prensibidir.
Dependency Injection kullanarak sınıflar arasındaki bağımlılıkları azaltabilir ve daha esnek yazılım mimarileri oluşturabilirsiniz.
Bu yaklaşım özellikle Spring Framework ve microservice mimarilerinde oldukça yaygın olarak kullanılmaktadır.
Umarız bu yazı sizler için faydalı olmuştur. Bir sonraki yazımızda görüşmek üzere.